import java.awt.*;

import javax.swing.*;

import layout.TableLayout;

/**
* @file PopupFrame.java
*
* @brief Diese Datei enthält die PopupFrame-Klasse.
*
* @author Alrik Künne
*
* @date 01.06.2012 - erste Version
* @date 19.06.2012 - einige Veränderungen, Multi-Threading
**/

/** 
* @class PopupFrame
* 
* @brief Popup um Personen von 0-14 einsteigen zu lassen 
*/ 
@SuppressWarnings("serial")
public class PopupFrame extends JFrame{
	JButton bPopupOK;
	JButton bPopupCancel;
	JSpinner sAnzahl;
	private JLabel lPerson;
	private JPanel pHead, pCenter, pBottom;
	int etagenwunsch;
	
	
	/**
	 * @brief Der Konstruktor
	 */	
	PopupFrame(){
		constructorExtend();
	}
	
	/**
	 * @brief Der Konstruktor
	 *
	 * @param title - Der Text, der oben im Rahmen als Überschrift dargestellt werden soll.
	 */
	PopupFrame(String title){
		super(title);
		constructorExtend();
	}
	
	/**
	 * @brief eine Init-Methode
	 * 
	 * erstellt die Oberfäche des PopupFrame mit allem Drum und Dran.
	 * Sie wird aber noch nicht sofort angezeigt. Die Anzeige erfolgt durch den EventHandler.
	 */
	void constructorExtend(){
			
		setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE); //* Damit das Close-Event abgefangen werden kann;
		setResizable(false);
		
		// Label konfigurieren
		lPerson =new JLabel("Wieviele Personen wollen einsteigen?");
		
		// Spinner konfigurieren
		sAnzahl=new JSpinner( new SpinnerNumberModel(1, 1, 14, 1) );
		((JSpinner.DefaultEditor) sAnzahl.getEditor()).getTextField().setEditable(false);
		sAnzahl.setPreferredSize(new Dimension(120,20));
		
		// Buttons konfigurieren
		bPopupOK = new JButton("OK");
		bPopupOK.setPreferredSize(new Dimension(120,20));
		bPopupCancel = new JButton("Abbrechen");
		bPopupCancel.setPreferredSize(new Dimension(120,20));
		
		// Hauptlayout
		double[][] mainTable = new double[][]{
				{TableLayout.FILL}, //Spalten
		        {30, TableLayout.FILL, 30, TableLayout.FILL, 30} //Zeilen
		    };
		
		this.setLayout(new TableLayout(mainTable));
		//pHead.setLayout(tLayout);
		
		// Panels konfigurieren
		pHead = new JPanel();
		pHead.setLayout(new FlowLayout(1)); // 1 = align CENTER
		pHead.add(lPerson);
		//pHead.setBackground(Color.green);
		
		pCenter = new JPanel();
		pCenter.setLayout(new FlowLayout(1));
		pCenter.add(sAnzahl);
		//pCenter.setBackground(Color.blue);
		
		pBottom = new JPanel();
		pBottom.add(bPopupOK);
		pBottom.add(bPopupCancel);
		//pBottom.setBackground(Color.red);
		
		this.add(pHead, "0,0");
		this.add(pCenter, "0,2");
		this.add(pBottom, "0,4");
		this.setSize(300, 140);
		
		//Bei Mac wird das Icon anders erzeugt als auf den anderen OS
		if(System.getProperty("os.name").toString().compareTo("Mac OS X")!=0){
			 Image im = Toolkit.getDefaultToolkit().getImage("images/up_highres.png");
			 setIconImage(im);
		 }
		
		placeScreenMid(this);
		//this.setVisible(true); rausgenommen, damit wir actions zuweisen können, aber das fenster noch nicht erscheint
	}
	
	/**
	 * @brief Der Konstruktor
	 *
	 * @return int Etage für die das PopupFrame geöffnet wurde.
	 */
	public int getEtage(){
		return etagenwunsch;
	}
	
	/**
	 * @brief Der Konstruktor
	 *
	 * @return int Anzahl der Personen, die auf dem PopupFrame eingestellt wurden.
	 */
	public int getAnz(){
		return (Integer) sAnzahl.getValue();
	}
	
	/**
	 * @brief Der Konstruktor
	 *
	 * @param etage -  einstellen der Etage, für die das PopupFrame geöffnet wird.
	 * 
	 * Die Etage wird oben im Titel des PopupFrame angezeigt.
	 */
	public void setEtage(int etage){
		etagenwunsch=etage;
		this.setTitle(Integer.toString(etagenwunsch)+".Etage");
		this.sAnzahl.setValue(1);
	}
	
	/**
	 * @brief Fenster-zentrier-Funktion
	 *
	 * @param Frame -  Das zu zentrierende Fenster
	 * 
	 * Das Fenster, welches an diese Funktion übergeben wird, wird zentriert.
	 */
	void placeScreenMid( JFrame Frame){
		Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
		Dimension windowSize = this.getSize();
				
		Frame.setLocation(( (screenSize.width  - windowSize.width ) / 2), ((screenSize.height - windowSize.height) / 2) );	
	}
}
